import asyncio
import time
import aiohttp
import blog_spider

# 控制并发度，限制同时进行的异步请求数量为 10
semaphore = asyncio.Semaphore(10)

# 协程函数，用于异步地爬取网页内容
async def async_craw(url: str):
    # 在 semaphore 代码块内的操作受到 semaphore 信号量的控制，限制并发数量
    async with semaphore:
        print("craw url: ", url)
        async with aiohttp.ClientSession() as session:
            async with session.get(url) as resp:
                result = await resp.text()
                # 模拟耗时操作，休眠 5 秒
                await asyncio.sleep(5)
                print(f"craw url:{url}, {len(result)}")

loop = asyncio.get_event_loop()

# 创建多个协程任务
tasks = [loop.create_task(async_craw(url)) for url in blog_spider.urls]

start = time.time()  # 记录开始时间
# 并发执行所有协程任务，并等待完成
loop.run_until_complete(asyncio.wait(tasks))
end = time.time()  # 记录结束时间

# 打印执行时间
print("use time seconds: ", end - start)
